1. Field of the Invention
The present invention relates to computer networks. More specifically, the present invention relates to methods and devices for communicating with a Transmission Control Protocol (“TCP”) offload engine (“TOE”).
2. Description of Related Art
In recent years, the communication speed in networked systems has surpassed the growth of microprocessor performance in many network devices. For example, Ethernet has become the most commonly-used networking protocol for local area networks. The increase in speed from 10 Mb/s Ethernet to 10 Gb/s Ethernet has not been matched by a commensurate increase in the performance of processors used in most network devices.
This phenomenon has produced an input/output (I/O) bottleneck because network device processors cannot always keep up with the rate of data flow through a network. An important reason for the bottleneck is that the TCP/IP stack is processed at a rate slower than the speed of the network. The processing of TCP/IP has typically been performed by software running on a central processor of a server. Reassembling out-of-order packets, processing interrupts and performing memory copies places a significant load on the CPU. In high-speed networks, such a CPU may need more processing capability for network traffic than for running other applications.
A TCP/IP offload engine (“TOE”) helps to relieve this I/O bottleneck by removing the burden (offloading) of processing TCP/IP from the microprocessor(s) and I/O subsystem. A TOE has typically been implemented in a host bus adapter (“HBA”) or a network interface card (“NIC”).
The growing popularity of network storage applications such as Internet Protocol storage (“IPS”) has placed even greater TCP/IP processing burdens on network devices. The iSCSI (Internet Small Computer Systems Interface) protocol is commonly used to establish and maintain connections between IP-based storage devices, hosts and clients. iSCSI employs an encapsulated SCSI protocol for mapping of block-oriented storage data over TCP/IP networks. Every TCP connection that is part of an iSCSI session includes TCP processing overhead for, e.g., setup/teardown of connections, window management, congestion control, checksum calculations, interrupts, memory copies, etc. Therefore, it is highly desirable to implement TCP offload mechanisms to enhance network storage performance.
In addition to placing a TCP/IP processing burden on network devices, the implementation of IP storage using iSCSI (or similar protocols) is problematic for other reasons. For example, related iSCSI protocol data units (“PDUs”) may take varying paths through a network and arrive out of order. Sometimes an iSCSI header may not be received when expected because the TCP segment that it was part of was delivered out of order. In some instances, one or more PDUs may not arrive at all.
Further complications are introduced when the network application involves accessing, via an IP network, storage devices that are part of a Fibre Channel (“FC”) network. The storage device may be, for example, a network attached storage (“NAS”) device on an FC network that is accessed by a NAS client via an IP network. The two application protocols commonly used by NAS servers are the Network File System (“NFS”) and the Common Internet File System (“CIFS”). Many NAS systems also support Hypertext Transfer Protocol (“HTTP”), allowing a NAS client to download files using a Web browser from a NAS server that supports HTTP.
Prior art TOEs do not provide satisfactory methods for processing traffic from NAS clients on a TCP/IP network directed to a NAS server on an FC network. In such a system, there is no TCP connection to the NAS server. Prior art systems do not allow a NAS server to place data from a TOE in a specific memory location and require data coming from the IP network to be copied from various memory locations for reconstruction on the FC side. It would be desirable to develop systems and methods that address some or all of the limitations of the prior art.